/**
 * @copyright Copyright (c) 2023..
 *
 * @file    common_opr_string.h
 * @brief   描述 通用字符串操作API
 * @author  HC(202206728@any3.com)
 * @version 1.0
 * @date    2023-09-27
 */
#ifndef COMMON_OPR_STRING_H
#define COMMON_OPR_STRING_H

#include "string.h"
#include <string>
#include <vector>

using namespace std;

class CommonOprString
{
public:
    CommonOprString();
    ~CommonOprString();

    static std::string stringReplace(const std::string &source, const std::string &oldValue, const std::string &newValue);

    /******************************************************************************************
     * @function      ： splitbypattern()
     * @param input   :  string strIn               目标字符串
     * @param output  :  string pattern             分割字符串
     * @return        :  vector<string>             分割结果，字符串集合
     * @description   :  以特定字符串对目标字符串进行分割
     * ****************************************************************************************/
    static vector<string> splitbypattern(const string &strIn, const string &pattern);

    /******************************************************************************************
     * @function      ： strchangelower()
     * @param input   :  string &strInAndOut        目标字符串的引用
     * @param output  :  string &strInAndOut        目标字符串的引用
     * @return        :  无
     * @description   :  字符串中的字母字符转小写
     * ****************************************************************************************/
    static void strchangelower(string &strInAndOut);

    /******************************************************************************************
     * @function      ： strchangeupper()
     * @param input   :  string &strInAndOut        目标字符串的引用
     * @param output  :  string &strInAndOut        目标字符串的引用
     * @return        :  无
     * @description   :  字符串中的字母字符转大写
     * ****************************************************************************************/
    static void strchangeupper(string &strInAndOut);

    static int bytesToHexStr(const uint8_t *input_Bytes, uint32_t BytesLen, string &strOut);

    static int bytesToHexStrLower(const uint8_t *input_Bytes, uint32_t BytesLen, string &strOut);

    static string GetRandStr(const int strlen);

    static string getbetweenstrs(const string &str, const string &start, const string &end);

    static string hex_to_asciistring(const uint8_t *data, uint32_t size, string &str);
    static string hex_to_asciistring_uint8_t(const uint8_t data, string &str);
    static string hex_to_asciistring_uint16_t(const uint16_t data, string &str);
    static string hex_to_asciistring_uint32_t(const uint32_t data, string &str);

    /******************************************************************************************
     * @function      ： childStrContainCheck()
     * @param input   :  string &targetStr        被检测字符串的引用
     * @param output  :  string &childStr         目标子字符串的引用
     * @return        :  int
     * @description   :  检测字符串中是否包含目标子字符串
     * ****************************************************************************************/
    static int childStrContainCheck(const string &checkedStr, const string &childStr);

    static void deletEnter(string &strInAndOut);

    /******************************************************************************************
     * @function      ： suffixStrContainCheck()
     * @param input   :  string &checkedStr       被检测字符串的引用
     * @param output  :  string &suffix           目标后缀的引用
     * @return        :  int
     * @description   :  检测字符串中是否包含目标后缀
     * ****************************************************************************************/
    static int suffixStrContainCheck(const string &checkedStr, const string &suffix);

    /******************************************************************************************
     * @function      ： suffixStrContainCheck()
     * @param input   :  string &checkedStr       被检测字符串的引用
     * @param output  :  string &suffix           目标前缀的引用
     * @return        :  int
     * @description   :  检测字符串中是否包含目标前缀
     * ****************************************************************************************/
    static int prefixStrContainCheck(const string &checkedStr, const string &prefix);

};

#endif